home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / nwtp06 / logout.pas < prev    next >
Pascal/Delphi Source File  |  1996-07-10  |  5KB  |  215 lines

  1. {$X+,B-,V-} {essential compiler directives}
  2.  
  3. Program Logout;
  4.  
  5. { Fixed by RPL }
  6.  
  7. uses crt,dos,graph,nwConn;
  8. { demo of a program that logs out the user, and fills the screen with
  9.   a worm, functionally equal to the worm of the netware console monitor. }
  10.  
  11. const
  12.   MaxTailLen      = 30;
  13.   MaxDeviations   = 15;
  14.   MaxSymbols      = 5;
  15.   TailSegments    : array[1..MaxSymbols] of byte
  16.                   = (32,176,177,178,219);
  17.  
  18. type
  19.   BorderColl = (left,right,upside,downside);
  20.  
  21. var
  22.   gd,gm           : integer;
  23.  
  24.   color           : boolean;
  25.   wormrecord      : record
  26.                     x_head,y_head : integer;
  27.                     ChosenDir     : integer;
  28.                     PreferredDir  : integer;
  29.                     LengthFactor  : integer;
  30.                     TailLen       : integer;
  31.                     x,y           : array[1..MaxTailLen] of integer;
  32.                     end;
  33.  
  34.  
  35. procedure Initialization;
  36. var CurrSegment : integer;
  37. begin
  38. randomize;
  39.  
  40. with wormrecord
  41.  do begin
  42.     LengthFactor:=random(5)+3;
  43.     TailLen:=MaxSymbols*LengthFactor;
  44.     if TailLen>MaxTailLen then TailLen:=MaxTailLen;
  45.     x_head:=40;
  46.     y_head:=12;
  47.     PreferredDir:=random(8);
  48.     for CurrSegment:=1 to MaxTailLen
  49.      do begin
  50.         x[CurrSegment]:=0;
  51.         y[CurrSegment]:=0;
  52.         end;
  53.     end;
  54. end;
  55.  
  56. procedure ChooseDir;
  57. { This procedure determines the future direction of the worm. }
  58. VAR NbrOfDev : integer;
  59. begin
  60. NbrOfDev:=0;
  61. with wormrecord
  62.  do begin
  63.     repeat
  64.       repeat
  65.         inc (NbrOfDev);
  66.         ChosenDir:=random(8);
  67.       until  (NbrOfDev>=MaxDeviations)
  68.              or (ChosenDir=PreferredDir);
  69.     until abs(PreferredDir-ChosenDir)<>4;
  70.     PreferredDir:=ChosenDir;
  71.     end;
  72. end;
  73.  
  74. procedure DrawWorm;
  75. var CurrSegment : integer;
  76.     SegmentSym : integer;
  77. begin
  78. with wormrecord
  79.  do begin
  80.     if color then textcolor (7);
  81.     for CurrSegment:=1 to TailLen
  82.      do begin
  83.         SegmentSym:=(CurrSegment-1) div LengthFactor+1;
  84.         if (x[CurrSegment]<>0)
  85.          then begin
  86.               gotoxy (x[CurrSegment],y[CurrSegment]);
  87.               write (chr(TailSegments[SegmentSym]),
  88.                      chr(TailSegments[SegmentSym]));
  89.               end;
  90.         if (CurrSegment<TailLen)
  91.          then begin
  92.               x[CurrSegment]:=x[CurrSegment+1];
  93.               y[CurrSegment]:=y[CurrSegment+1];
  94.               end;
  95.         end;
  96.     gotoxy (x[TailLen],y[TailLen]);
  97.     x[TailLen]:=x_head;
  98.     y[TailLen]:=y_head;
  99.     end;
  100. if color then textcolor (7);
  101. end;
  102.  
  103. procedure ReverseDir (ScreenBorder:BorderColl);
  104. { Bounce directions on screenborders }
  105. begin
  106. with wormrecord
  107.  do case ScreenBorder of
  108.     left  : case PreferredDir of
  109.               3 : PreferredDir:=1;
  110.               4 : PreferredDir:=0;
  111.               5 : PreferredDir:=7;
  112.              end;
  113.     right : case PreferredDir of
  114.               1 : PreferredDir:=3;
  115.               0 : PreferredDir:=4;
  116.               7 : PreferredDir:=5;
  117.              end;
  118.     upside  : case PreferredDir of
  119.               1 : PreferredDir:=7;
  120.               2 : PreferredDir:=6;
  121.               3 : PreferredDir:=5;
  122.             end;
  123.     downside  : case PreferredDir of
  124.               5 : PreferredDir:=3;
  125.               6 : PreferredDir:=2;
  126.               7 : PreferredDir:=1;
  127.             end;
  128.   end;
  129. end;
  130.  
  131.  
  132. procedure DeterminePos;
  133. begin
  134. with wormrecord
  135.  do begin
  136.     if (ChosenDir in [1..3])
  137.      then dec (y_head);
  138.     if (ChosenDir in [5..7])
  139.      then inc (y_head);
  140.     if (ChosenDir in [3..5])
  141.      then dec (x_head);
  142.     if (ChosenDir<2) or (ChosenDir=7)
  143.      then inc (x_head);
  144.     if (ChosenDir=0)
  145.      then inc (x_head);
  146.     if (ChosenDir=4)
  147.      then dec (x_head);
  148.  
  149.     if (x_head<1)
  150.      then begin
  151.           x_head:=2-x_head;
  152.           ReverseDir (left);
  153.           end;
  154.     if (x_head>77)
  155.      then begin
  156.           x_head:=77-(x_head-77);
  157.           ReverseDir (right);
  158.           end;
  159.     if (y_head<1)
  160.      then begin
  161.           y_head:=2-y_head;
  162.           ReverseDir (upside);
  163.           end;
  164.     if (y_head>24)
  165.      then begin
  166.           y_head:=24-(y_head-24);
  167.           ReverseDir (downside);
  168.           end;
  169.     end; {with}
  170. end;
  171.  
  172.  
  173. procedure logoutservers;
  174. { Logs you out form all servers by logging out and detaching on
  175.   a server by server basis. You are not detached from your primary server. }
  176. Var connId:byte;
  177.     servName:string;
  178.     primserv:byte;
  179. begin
  180. GetPrimaryConnectionId(primServ);
  181. for connId:=1 to 8
  182.  do begin
  183.     IF GetFileServerName(ConnId,servName)
  184.      then begin
  185.           IF LogoutFromFileServer(ConnId)
  186.            then begin
  187.                 if (connId<>PrimServ)
  188.                  then begin
  189.                       DetachFromFileServer(connId);
  190.                       writeln('You are now detached from fileserver ',servName);
  191.                       end
  192.                  else writeln('You are now logged out from fileserver ',servName);
  193.                 end;
  194.           end
  195.     end;
  196. delay(2500);
  197. end;
  198.  
  199.  
  200. begin
  201.   color:=false;
  202.   detectgraph (gd,gm);
  203.   color:=(gd<>7);
  204.   logoutservers;
  205.   clrscr;
  206.   Initialization;
  207.   repeat
  208.    ChooseDir  ;
  209.    DeterminePos;
  210.    DrawWorm   ;
  211.   delay (150);
  212.   until keypressed;
  213.   clrscr;
  214. end.
  215.